package com.ruoyi.system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.dto.StageAddDTO;
import com.ruoyi.system.dto.StageQueryDTO;
import com.ruoyi.system.dto.StageUpdateDTO;
import com.ruoyi.system.entity.ConstructionStageDO;

import java.util.List;

/**
 * 施工阶段配置Service
 */
public interface ConstructionStageService extends IService<ConstructionStageDO> {

    /**
     * 新增自定义施工阶段
     * @param dto 新增DTO
     * @param designerId 设计师ID（自定义阶段仅限当前设计师使用）
     * @param operator 操作人
     * @return 新增阶段ID
     */
    Long addCustomStage(StageAddDTO dto, String designerId, String operator);

    /**
     * 修改施工阶段（固定阶段仅可修改“是否必选”和“状态”）
     * @param dto 修改DTO
     * @param operator 操作人
     */
    void updateStage(StageUpdateDTO dto, String operator);

    /**
     * 删除自定义施工阶段（需校验是否关联项目）
     * @param stageId 阶段ID
     */
    void deleteCustomStage(Long stageId);

    /**
     * 分页查询施工阶段列表
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    Page<ConstructionStageDO> queryStagePage(StageQueryDTO queryDTO);

    /**
     * 批量绑定阶段到项目
     * @param stageIdList 阶段ID列表
     * @param projectIdList 项目ID列表
     * @param operator 操作人
     */
    void batchBindProjects(List<Long> stageIdList, List<Long> projectIdList, String operator);

    /**
     * 批量解除阶段与项目的绑定
     * @param stageIdList 阶段ID列表
     * @param projectIdList 项目ID列表
     */
    void batchUnbindProjects(List<Long> stageIdList, List<Long> projectIdList);

    /**
     * 校验阶段是否合法（存在且启用）
     * @param stageIdList 阶段ID列表
     * @return true-合法，false-不合法
     */
    boolean checkStagesValid(List<Long> stageIdList);

    /**
     * 生成阶段编号（固定阶段前缀GD，自定义阶段前缀ZD）
     * @param stageType 阶段类型（1-固定，2-自定义）
     * @return 阶段编号
     */
    String generateStageCode(Integer stageType);



}